Leaflet 移动端

Leaflet 移动端

在此示例中,您将学习如何创建针对 iPhone、iPad 或 Android 手机等移动设备进行调整的全屏地图,以及如何轻松检测和使用当前用户位置。

<iframe src=’Mobile tutorial – Leaflet (leafletjs.com)‘ width=’100%’ height=’360px’></iframe>

准备页面

首先我们来看看页面的 HTML & CSS 代码。为了使我们的地图 div 元素拉伸到所有可用空间(全屏),我们可以使用以下 CSS 代码(注意:在此示例中,我们使用百分比表示高度。虽然 vh 可以说更好,但由于移动设备上的 Google Chrome 存在错误。 ):

body {
    padding: 0;
    margin: 0;
}
html, body, #map {
    height: 100%;
    width: 100vw;
}

此外,我们需要告诉移动浏览器禁用不需要的页面缩放,并通过在 head 部分或我们的 HTML 页面中放置以下行来将其设置为实际大小:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

初始化地图

我们现在将在 JavaScript 代码中初始化地图,就像我们在快速入门指南中所做的那样,展示整个世界:

var map = L.map('map').fitWorld();

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 19,
    attribution: '© OpenStreetMap'
}).addTo(map);

地理位置

Leaflet 有一个非常方便的快捷方式,可以将地图视图缩放到检测到的位置 – 使用 setView 选项定位方法,替换代码中通常的 setView 方法:

map.locate({setView: true, maxZoom: 16});

这里我们指定 16 为自动设置地图视图时 的最大缩放。一旦用户同意分享它的位置并且浏览器检测到它,地图就会设置它的视图。现在我们有了一个可以工作的全屏移动地图!但是如果我们需要在地理定位完成后做一些事情呢?这是 locationfound 和 locationerror 事件的用途。例如,让我们通过在 locateAndSetView 调用之前向 locationfound 事件添加事件侦听器,在检测到的位置添加一个标记,在弹出窗口中显示准确性:

function onLocationFound(e) {
    var radius = e.accuracy;

    L.marker(e.latlng).addTo(map)
        .bindPopup("You are within " + radius + " meters from this point").openPopup();

    L.circle(e.latlng, radius).addTo(map);
}

map.on('locationfound', onLocationFound);

但是如果地理定位失败,显示错误消息也很好:

function onLocationError(e) {
    alert(e.message);
}

map.on('locationerror', onLocationError);

如果您将 setView 选项设置为 true 并且地理定位失败,它会将视图设置为整个世界。

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x